package app;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * Clase BuscarPropiedad.
 * <p>
 * Realiza una busqueda de propiedades dado unos parametros.
 * 
 * @author Jared Kurosawa
 */
public class BuscarPropiedad {

	private final static int DIMENSION_MENOR_QUE = 1;
	private final static int DIMENSION_ENTRE = 2;
	private final static int DIMENSION_MAYOR_QUE = 3;

	private static int criterioDimension;
	private static int criterioTipo;

	private static int menorDimension;
	private static int mayorDimension;

	/**
	 * Metodo de busqueda de propiedades.
	 * 
	 * @param anuncios
	 *          es una lista con los anuncios del sistema.
	 */
	public static void bp(ArrayList<Anuncio> anuncios) {
		Scanner sc = new Scanner(System.in);

		// Establecimiento del criterio de busqueda por dimension
		System.out.println("1.- Dimension menor que un numero.");
		System.out.println("2.- Dimension entre dos numeros.");
		System.out.println("3.- Dimension mayor que un numero.");
		System.out.println("0.- No usar este criterio.\n");
		
		do {
			System.out.print("Seleccione un criterio de busqueda por dimensiones: ");
			
			try {
				criterioDimension = Integer.parseInt(sc.nextLine().trim());
			}
			catch (NumberFormatException e) {
				System.out.println("\nHa introducido un valor incorrecto.");
				criterioDimension = -1;
			}
			
			System.out.println ("");
		} while ((criterioDimension < 0) || (criterioDimension > 3));

		switch (criterioDimension) {
		case DIMENSION_MENOR_QUE:
			System.out.print("Introduce el maximo de dimension: ");
			mayorDimension = Integer.parseInt(sc.nextLine());
			System.out.println("");
			break;
		case DIMENSION_ENTRE:
			System.out.print("Introduce el minimo de dimension: ");
			menorDimension = Integer.parseInt(sc.nextLine());
			System.out.print("Introduce el maximo de dimension: ");
			mayorDimension = Integer.parseInt(sc.nextLine());
			System.out.println("");
			break;
		case DIMENSION_MAYOR_QUE:
			System.out.print("Introduce el minimo de dimension: ");
			menorDimension = Integer.parseInt(sc.nextLine());
			System.out.println("");
		}

		// Establecimiento del criterio de busqueda por tipo de inmueble
		System.out.println("1.- Solar.");
		System.out.println("2.- Piso.");
		System.out.println("3.- Casa terrera.");
		System.out.println("4.- Local comercial.");
		System.out.println("0.- No usar este criterio.\n");

		do {
			System.out.print("Seleccione un criterio de busqueda por tipo de inmueble: ");
			
			try {
				criterioTipo = Integer.parseInt(sc.nextLine().trim());
			}
			catch (NumberFormatException e){
				System.out.println("\nHa introducido un valor incorrecto.");
				criterioTipo = -1;
			}
			
			System.out.println ("");
		} while ((criterioTipo < 0) && (criterioTipo > 4));

		ArrayList<Anuncio> busqueda = new ArrayList<Anuncio>();

		for (int i = 0; i < anuncios.size(); i++) {
			Anuncio a = anuncios.get(i);
			boolean coincide = true;

			// Aplicacion del criterio por dimension
			switch (criterioDimension) {
			case DIMENSION_MENOR_QUE:
				if (a.getDimension() > mayorDimension)
					coincide = false;
				break;
			case DIMENSION_ENTRE:
				if ((a.getDimension() < menorDimension)	|| (a.getDimension() > mayorDimension))
					coincide = false;
				break;
			case DIMENSION_MAYOR_QUE:
				if (a.getDimension() < menorDimension)
					coincide = false;
			}
			
			// Aplicacion del criterio por tipo de inmueble
			if (criterioTipo != 0)
			{
				if (a.getTipoInmueble () != criterioTipo)
					coincide = false;
			}
			
			if (coincide == true)
				busqueda.add (a);
		}

		if (busqueda.size() == 0)
			System.out.println("Ninguna propiedad ha coincidido con los criterios establecidos.\n");
		else
		{
			System.out.println(busqueda.size () + " propiedades encontradas que satisfacen los criterios establecidos.\n");
			
			for (int i = 0; i < busqueda.size (); i++)
				VerPropiedad.vp(busqueda.get (i));
		}
	}
}
